    /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.segu.mbean;

import com.brain.core.configuracion.WebServletContextListener;
import com.brain.core.exception.DAOException;
import com.brain.core.manager.BitacoraManager;
import com.brain.core.manager.PropietarioManager;
import com.brain.core.manager.RecursosManager;

import com.brain.core.view.mbean.ApplicationMBean;
import com.brain.core.view.mbean.GenericMBean;
import com.brain.core.view.mbean.PropietarioMBean;
import com.brain.core.view.mbean.SessionMBean;

import com.brain.segu.dto.RolDto;
import com.brain.segu.dto.UsuarioDto;
import com.brain.segu.manager.RolManager;
import com.brain.segu.manager.UsuarioManager;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;
import javax.faces.event.ActionEvent;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

/**
 *
 * @author Indra
 */
@Controller("usuarioMBean")
@Scope("session")
public class UsuarioMBean extends GenericMBean implements Serializable {

    private static Logger logger = Logger.getLogger(UsuarioMBean.class);
    @Resource
    private UsuarioManager manager;
    @Resource
    private RolManager managerRol;
    @Resource
    private RecursosManager recursosManager;
    @Resource
    private BitacoraManager bitacoraManager;
    @Resource
    private PropietarioManager propietarioManager;
    private List<UsuarioDto> lista;
    private UsuarioDto dto;
    private UsuarioDto dtoFiltro;
    private String keyTitulo = "key.entidad.usuario";
    @Autowired
    private ApplicationMBean applicationMBean;
    @Autowired
    private SessionMBean sessionMBean;
    private String contrasenaAnterior;
    private String contrasenaNueva;
    private String contrasenaVerificar;
    private List<RolDto> rolesActivos;
    private List<RolDto> rolesActivosBusqueda;

    public UsuarioMBean() {
        this.dtoFiltro = new UsuarioDto();
    }

    public String iniciar() {
        this.lista = null;
        this.dto = null;
        this.dtoFiltro = new UsuarioDto();
        this.dtoFiltro.setRolDto(new RolDto(managerRol.getRolTodos()));
        return this.manager.urlListaUsuarios;
    }

    public String nuevo() {
        sessionMBean.setAccion(applicationMBean.getNuevo());
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        this.lista = new ArrayList<UsuarioDto>();
        this.dto = manager.inicializar();
        return this.manager.getUrlUsuario();
    }

    public String editar() {
        sessionMBean.setAccion(applicationMBean.getEditar());
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        return this.manager.getUrlUsuario();
    }

    public String cambiarContrasena() {
        this.dto = sessionMBean.getSessionUsuarioDto();
        sessionMBean.setAccion(applicationMBean.getEditar());
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        return this.manager.getUrlUsuarioCambiarContrasena();
    }

    public String formatearContrasena() {
        sessionMBean.setAccion(applicationMBean.getEditar());
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        return this.manager.getUrlUsuarioFormatearContrasena();
    }

    public String ver() {
        sessionMBean.setAccion(applicationMBean.getVer());
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        return this.manager.getUrlUsuario();
    }

    public void buscar(ActionEvent ae) {

        try {
            this.lista = this.manager.obtener(this.dtoFiltro);
        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }

    }

    public String guardar() {
        try {
            manager.guardar(this.dto);
            editar();
        } catch (Exception e) {
            logger.error(e.getMessage());
        }
        return null;
    }

    public String verBitacora() {
        bitacoraManager.cargarBitacoraEntidad(manager.getIdEntidad(), this.dto.getId());
        return null;
    }

    public String verPropietario() {
        sessionMBean.setEntidad(manager.getIdEntidad());
        sessionMBean.setRegistro(dto.getId());
        PropietarioMBean propietarioMBean = (PropietarioMBean) WebServletContextListener.getApplicationContext().getBean("propietarioMBean");
        propietarioMBean.setEmpresa(dto.getEmpresa());
        propietarioMBean.cargarPropietariosRegistro();
        propietarioMBean.inicializarCampos();
        return null;
    }

    public void editarEmail(UsuarioDto usuarioDto) throws DAOException {
        this.manager.editarEmail(usuarioDto);
    }

    public String guardarContrasenaFormateada() {
        this.manager.guardarContrasenaFormateada(this.dto);
        return null;
    }

    public String guardarContrasena() {
        this.manager.guardarContrasena(this.dto, contrasenaNueva, contrasenaVerificar);
        return null;
    }

    public List<UsuarioDto> autoCompletarUsuario(String query) {
        List<UsuarioDto> results = null;
        try {
            results = manager.autoCompletarUsuariosPorEmpresa(query);
        } catch (DAOException ex) {
            logger.error(ex);
            results = new ArrayList<UsuarioDto>();
        }
        return results;
    }

    public List<UsuarioDto> autoCompletarUsuarioSgc(String query) {

        List<UsuarioDto> results = null;
        try {

            results = manager.obtenerUsuariosQueSeanEmpleadosCMAC(query);
        } catch (DAOException ex) {
            logger.error(ex);
            results = new ArrayList<UsuarioDto>();
        }
        return results;
    }

    public String retroceder() {
        buscar(null);
        sessionMBean.setAccion(applicationMBean.getLista());
        return this.manager.urlListaUsuarios;
    }

    public static Logger getLogger() {
        return logger;
    }

    public static void setLogger(Logger logger) {
        UsuarioMBean.logger = logger;
    }

    public UsuarioManager getManager() {
        return manager;
    }

    public void setManager(UsuarioManager manager) {
        this.manager = manager;
    }

    public RecursosManager getRecursosManager() {
        return recursosManager;
    }

    public void setRecursosManager(RecursosManager recursosManager) {
        this.recursosManager = recursosManager;
    }

    public List<UsuarioDto> getLista() {
        return lista;
    }

    public void setLista(List<UsuarioDto> lista) {
        this.lista = lista;
    }

    public UsuarioDto getDto() {
        return dto;
    }

    public void setDto(UsuarioDto dto) {
        this.dto = dto;
    }

    public UsuarioDto getDtoFiltro() {
        return dtoFiltro;
    }

    public void setDtoFiltro(UsuarioDto dtoFiltro) {
        this.dtoFiltro = dtoFiltro;
    }

    public String getKeyTitulo() {
        return keyTitulo;
    }

    public void setKeyTitulo(String keyTitulo) {
        this.keyTitulo = keyTitulo;
    }

    public ApplicationMBean getApplicationMBean() {
        return applicationMBean;
    }

    public void setApplicationMBean(ApplicationMBean applicationMBean) {
        this.applicationMBean = applicationMBean;
    }

    public SessionMBean getSessionMBean() {
        return sessionMBean;
    }

    public void setSessionMBean(SessionMBean sessionMBean) {
        this.sessionMBean = sessionMBean;
    }

    public String getContrasenaAnterior() {
        return contrasenaAnterior;
    }

    public void setContrasenaAnterior(String contrasenaAnterior) {
        this.contrasenaAnterior = contrasenaAnterior;
    }

    public String getContrasenaNueva() {
        return contrasenaNueva;
    }

    public void setContrasenaNueva(String contrasenaNueva) {
        this.contrasenaNueva = contrasenaNueva;
    }

    public String getContrasenaVerificar() {
        return contrasenaVerificar;
    }

    public void setContrasenaVerificar(String contrasenaVerificar) {
        this.contrasenaVerificar = contrasenaVerificar;
    }

    public List<RolDto> getRolesActivos() {
        try {
            rolesActivos = managerRol.obtenerTodosActivos();
        } catch (DAOException ex) {
            logger.error(ex);
        }
        return rolesActivos;
    }

    public void setRolesActivos(List<RolDto> rolesActivos) {
        this.rolesActivos = rolesActivos;
    }

    public RolManager getManagerRol() {
        return managerRol;
    }

    public void setManagerRol(RolManager managerRol) {
        this.managerRol = managerRol;
    }

    public BitacoraManager getBitacoraManager() {
        return bitacoraManager;
    }

    public void setBitacoraManager(BitacoraManager bitacoraManager) {
        this.bitacoraManager = bitacoraManager;
    }

    public List<RolDto> getRolesActivosBusqueda() throws DAOException {
        rolesActivosBusqueda = managerRol.obtenerTodosActivosTodos();
        return rolesActivosBusqueda;
    }

    public void setRolesActivosBusqueda(List<RolDto> rolesActivosBusqueda) {
        this.rolesActivosBusqueda = rolesActivosBusqueda;
    }
}
